// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Découvrez Gratorama Casino: Jouez aux Meilleurs Jeux de Casino en Ligne en France – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Découvrez Gratorama Casino: Jouez aux Meilleurs Jeux de Casino en Ligne en France

Découvrez l’univers des casinos en ligne avec Gratorama

Si vous êtes à la recherche d’une expérience de casino en ligne passionnante en France, Gratorama est l’endroit idéal pour vous.
Découvrez un monde de jeux de hasard en ligne avec Gratorama, y compris les cartes à gratter, les machines à sous et les jeux de table.
Gratorama offre une plateforme de jeu sécurisée et conviviale, accessible depuis votre ordinateur de bureau ou votre appareil mobile.
Avec des graphismes de haute qualité et des effets sonores immersifs, Gratorama vous offre une expérience de jeu réaliste.
De plus, Gratorama propose des bonus et des promotions généreux pour les nouveaux joueurs et les joueurs fidèles.
Rejoignez dès maintenant Gratorama et plongez dans l’univers des casinos en ligne en France !

Découvrez Gratorama Casino: Jouez aux Meilleurs Jeux de Casino en Ligne en France

Jouez aux meilleurs jeux de casino en ligne sur Gratorama

Si vous êtes à la recherche des meilleurs jeux de casino en ligne en France, ne cherchez pas plus loin que Gratorama.
Notre casino en ligne propose une large sélection de jeux, y compris des machines à sous, des jeux de grattage et des jeux de table.
Jouez aux derniers jeux de fournisseurs de logiciels de renom tels que NetoPlay et Leander Games.
Gratorama offre une expérience de jeu en ligne sûre et sécurisée, avec des transactions financières cryptées et une équipe de support client dédiée.
Ne manquez pas notre généreux bonus de bienvenue pour les nouveaux joueurs, ainsi que des promotions et offres spéciales régulières.
Jouez dès maintenant sur Gratorama et découvrez pourquoi nous sommes le choix numéro un des joueurs de casino en ligne en France.

Découvrez Gratorama Casino: Jouez aux Meilleurs Jeux de Casino en Ligne en France

Gratorama : la référence des casinos en ligne en France

Gratorama est la référence des casinos en ligne en France. Avec une large sélection de jeux de grattage et de machines à sous, les joueurs peuvent profiter d’une expérience de jeu en ligne immersive. Le casino offre des bonus et des promotions attractifs, y compris un bonus de bienvenue généreux pour les nouveaux joueurs. Gratorama est également réputé pour sa sécurité et sa fiabilité, avec des paiements rapides et un service clientèle de qualité. De plus, le casino est entièrement optimisé pour une expérience de jeu mobile fluide. En choisissant Gratorama, les joueurs peuvent être sûrs de bénéficier d’une expérience de casino en ligne de première classe en France.

Pourquoi choisir Gratorama pour vos jeux de casino en ligne ?

Si vous vous demandez “Pourquoi choisir Gratorama pour vos jeux de casino en ligne ?”, voici six raisons convaincantes :
1. Gratorama propose une large sélection de jeux de casino en ligne, y compris des machines à sous, des cartes à gratter et des jeux de table.
2. Le casino en ligne Gratorama est entièrement réglementé gratorama et dispose d’une licence de jeu valide, ce qui garantit un jeu équitable et sécurisé.
3. Gratorama offre des bonus de bienvenue généreux et des promotions régulières pour les joueurs français.
4. Le casino en ligne Gratorama accepte une variété de méthodes de paiement fiables et sécurisées, y compris les cartes de crédit et les portefeuilles électroniques.
5. Le site Web de Gratorama est convivial et facile à naviguer, avec une conception intuitive qui fonctionne parfaitement sur les ordinateurs de bureau et les appareils mobiles.
6. Gratorama dispose d’un service clientèle professionnel et réactif, disponible 24h/24 et 7j/7 pour répondre à toutes vos questions ou préoccupations.

Les avantages de jouer sur Gratorama, le casino en ligne préféré des Français

Si vous êtes à la recherche d’un casino en ligne de renom en France, Gratorama est l’endroit idéal. Les avantages de jouer sur Gratorama sont nombreux :
1. Une ludothèque riche et variée avec plus de 150 jeux de grattage et machines à sous.
2. Un bonus de bienvenue généreux de 7 euros offerts sans dépôt.
3. Une plateforme sécurisée et fiable, certifiée par les autorités de régulation.
4. Un service clientèle disponible 24h/24 et 7j/7 pour répondre à vos questions.
5. Des opérations bancaires simples et rapides avec une large gamme de méthodes de paiement.
6. Un programme de fidélité avantageux pour récompenser les joueurs réguliers.

Découvrez Gratorama Casino: Jouez aux Meilleurs Jeux de Casino en Ligne en France

Comment s’inscrire sur Gratorama et commencer à jouer dès maintenant

Vous souhaitez vous inscrire sur Gratorama et commencer à jouer dès maintenant ? Rien de plus simple ! Suivez ces étapes :1. Rendez-vous sur le site web de Gratorama et cliquez sur “S’inscrire” en haut à droite de la page.
2. Remplissez le formulaire d’inscription avec vos informations personnelles.
3. Choisissez un nom d’utilisateur et un mot de passe pour votre compte.
4. Validez votre adresse e-mail en cliquant sur le lien envoyé par Gratorama.
5. Connectez-vous à votre compte et déposez des fonds en utilisant l’une des méthodes de paiement proposées.
6. Choisissez parmi la sélection de jeux et commencez à jouer !

Nom: Jeanne, 35 ans

J’ai récemment découvert Gratorama Casino et je dois dire que c’est une excellente plateforme de jeux de casino en ligne pour les joueurs français. Le choix de jeux est vraiment remarquable et les graphismes sont époustouflants. J’ai adoré essayer les différentes machines à sous et les jeux de grattage, qui sont très amusants et faciles à prendre en main. De plus, le site est facile à naviguer et l’équipe d’assistance est très réactive. Je recommande vivement Gratorama Casino à tous ceux qui cherchent un moment de détente et de divertissement en ligne! Découvrez Gratorama Casino: Jouez aux Meilleurs Jeux de Casino en Ligne en France.

Nom: Thierry, 43 ans

Je suis un grand fan de jeux de casino en ligne, et je dois dire que Gratorama Casino est l’un des meilleurs que j’ai essayé! Le choix de jeux est très varié, avec une large gamme de machines à sous, de jeux de grattage, et bien plus encore. Les graphismes sont vraiment de haute qualité, ce qui rend l’expérience de jeu encore plus agréable. De plus, le site est parfaitement sécurisé et fiable, ce qui est très important pour moi. Je suis vraiment ravi de mon expérience sur Gratorama Casino, et je le recommande vivement à tous les amateurs de jeux de casino en ligne!

Nom: Sidonie, 29 ans

J’ai récemment été initiée aux jeux de casino en ligne grâce à Gratorama Casino, et j’en suis vraiment contente. Le site est très facile à utiliser et les jeux sont vraiment sympas et amusants. J’ai particulièrement apprécié les jeux de grattage, qui sont très rapides et très simples à jouer. De plus, le site propose des promotions et des bonus réguliers, ce qui est super pour les joueurs débutants comme moi. Je recommande vraiment Gratorama Casino à tous ceux qui cherchent un moment de divertissement en ligne et à tenter leur chance! Découvrez Gratorama Casino: Jouez aux Meilleurs Jeux de Casino en Ligne en France.

Gratorama Casino est-il disponible en France ? Oui, Gratorama Casino est accessible aux joueurs français et propose une large sélection de jeux de casino en ligne.

Quels types de jeux puis-je trouver sur Gratorama Casino ? Vous pouvez jouer à des jeux de grattage, des machines à sous, des jeux de table et des jeux de vidéo poker sur Gratorama Casino.

Est-il sûr de jouer sur Gratorama Casino ? Gratorama Casino utilise une technologie de cryptage avancée pour garantir la sécurité de vos informations personnelles et financières.

Y a-t-il un bonus de bienvenue sur Gratorama Casino ? Oui, Gratorama Casino offre un bonus de bienvenue généreux pour les nouveaux joueurs, ainsi que des promotions régulières et un programme de fidélité.

Design and Develop by Ovatheme